/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author tamerdark
 */
public class Pregunta extends Root {

    private int preguntaId;
    private String descripcion;
    private List<Opcion> opciones;
    private int peso;
    private int numRespuestas;
    private String fechaModificacion;

    public int getNumRespuestas() {
        return numRespuestas;
    }

    public void setNumRespuestas(int numRespuestas) {
        this.numRespuestas = numRespuestas;
    }

    /**
     * Constructor vacío
     * 
     * @return Un elemento Pregunta con todos sus atributos con los valores por
     *         defecto del sistema
     */
    public Pregunta() {
        opciones = new ArrayList<Opcion>();
    }

    /**
     * Agrega la opcion indicada como un elemento de la lista de opciones para la
     * pregunta contenida en this
     * 
     * @param o Objeto de tipo Opcion a agregar
     */
    public void agregarOpcion(Opcion o) {
        if (null == this.opciones) {
            this.opciones = new ArrayList<Opcion>();
        }
        this.opciones.add(o);
    }

    /**
     * Actualiza la opcion contenida en la lista de opciones posibles que posee
     * el mismo id que o
     * 
     * @param o Objeto Opcion con la información a modificar
     * @return true
     */
    public boolean modificarOpcion(Opcion o) {
        if (eliminarOpcion(o)) {
            agregarOpcion(o);
        }
        return true;
    }

    /**
     * Elimina la opcion indicada por o de la lista de opciones para la pregunta
     * contenida en this
     * 
     * @param o Objeto Opcion con la información de la opción a eliminar
     * @return True si se eliminó con éxito, false en caso contrario
     */
    public boolean eliminarOpcion(Opcion o) {
        return this.getOpciones().remove(o);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pregunta other = (Pregunta) obj;
        if (this.preguntaId != other.preguntaId) {
            return false;
        }
        return true;
    }

    //Getters
    public int getPeso() {
        return peso;
    }

    public List<Opcion> getOpciones() {
        System.out.println("getOpciones en Pregunta");
        return opciones;
    }

    public int getPreguntaId() {
        return preguntaId;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String getFechaModificacion() {
        return this.fechaModificacion;
    }

    //Setters
    public void setPeso(int peso) {
        this.peso = peso;
    }

    public void setOpciones(List<Opcion> opciones) {
        System.out.println("setOpciones en Pregunta");
        this.opciones = opciones;
    }

    public void setPreguntaId(int id) {
        this.preguntaId = id;
    }

    public void setDescripcion(String texto) {
        this.descripcion = texto;
    }

    public void setFechaModificacion(String a) {
        this.fechaModificacion = a;
    }

    @Override
    public void reset(ActionMapping arg0, HttpServletRequest request) {
        this.opciones = new ArrayList<Opcion>();
    }

    public Opcion getOpciones(int index) {
        while (index >= opciones.size()) {
            opciones.add(new Opcion());
        }
        return (Opcion) opciones.get(index);
    }
    
    public void setOpciones(int index, Opcion o ){
        this.opciones.set(index, o);
    }

    @Override
    public String toString() {
        return "Pregunta{" + "preguntaId=" + preguntaId + ", descripcion=" + descripcion + ", opciones=" + opciones + ", peso=" + peso + ", numRespuestas=" + numRespuestas + ", fechaModificacion=" + fechaModificacion + '}';
    }
}
